import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.File;  // 必须加上这行！

public class ImageViewer {
    public static void main(String[] args) {
        // 使用 EventQueue.invokeLater 确保事件调度线程执行创建和显示 GUI 的操作
        EventQueue.invokeLater(() -> {
            var frame = new ImageViewerFrame();
            frame.setTitle("ImageViewer"); // 设置窗口标题
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 设置关闭操作
            frame.setVisible(true); // 正确设置窗口为可见状态
        });
    }
}

// 继承自 JFrame 类来创建主窗口
class ImageViewerFrame extends JFrame {
    public static final int DEFAULT_WIDTH = 300; // 默认宽度
    public static final int DEFAULT_HEIGHT = 400; // 默认高度，原代码中此处有拼写错误

    public ImageViewerFrame() {
        setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT); // 设置窗口大小

        var label = new JLabel(); // 创建一个 JLabel 实例用于展示图片
        add(label); // 将标签添加到框架中

        var chooser = new JFileChooser(); // 创建文件选择器实例
        chooser.setCurrentDirectory(new File(".")); // 设置当前目录为用户的工作目录

        var menuBar = new JMenuBar(); // 创建菜单栏
        setJMenuBar(menuBar); // 设置此框架的菜单栏

        var menu = new JMenu("File"); // 创建“文件”菜单
        menuBar.add(menu); // 将菜单添加到菜单栏

        var openItem = new JMenuItem("Open"); // 创建打开菜单项
        menu.add(openItem); // 将打开菜单项添加到菜单
        openItem.addActionListener(event -> { // 添加动作监听器以处理打开操作
            int result = chooser.showOpenDialog(null); // 显示文件选择对话框

            if(result == JFileChooser.APPROVE_OPTION){ // 如果用户选择了文件
                String name = chooser.getSelectedFile().getPath(); // 获取所选文件路径
                label.setIcon(new ImageIcon(name)); // 更新标签图标为所选图片
            }
        });

        var exitItem = new JMenuItem("Exit"); // 创建退出菜单项
        menu.add(exitItem); // 将退出菜单项添加到菜单
        exitItem.addActionListener(event -> System.exit(0)); // 添加动作监听器以处理退出操作
    }
}